"use strict";
// 布尔类型（Boolean） true false
var flag = true;
flag = false;
// 数字类型（number）
// var a:number = 123
// a = "string" 错误
// a = false 错误
// console.log(a)
// a = 12.3
// console.log(a)
// 字符串类型（string）
var str = "this is ts";
// str = 12 //错误
// str = false //错误
str = "你好ts";
console.log(str);
// 数组类型（array） ts中定义数组有两种方式
// es5  var arr = [1,'2323',false]
// 1.第一种定义数组的方法
// let arr:number[] = [1,2,3,4]
// console.log(arr)
// let arr:string[] = ["php","js","golang"]
// console.log(arr)
// 2.第二种定义数组的方式
// let arr:Array<number> = [11,23,44,55]
// console.log(arr)
// let arr:Array<string> = ["php","js","golang"]
// console.log(arr)
// 元组类型（tuple）  属于数组的一种
var arr = ["ts", 3.18, true];
console.log(arr);
// 枚举类型
/*随着计算机的不断普及，程序不仅只用于数值计算还更广泛地处理非数值的数据。
例如：性别、月份、星期几、颜色、单位名、学历、职业等，都不是数值数据。
在其他程序设计语言中，一般用一个数值来代表某一状态，这种处理方法不直观，易读性差，
如果能在程序中用自然语言中有相应含义的单词来代表某一状态，则程序就很容易阅读和理解。
也就是说，事先考虑到某一变量可能取的值，尽量用自然语言中含义清楚的单词来表示它的每一个值，这种方法称为枚举方法，用这种方法定义的类型称枚举类型


*/
// enum Flag {success = 1,error = -1}
// var f:Flag = Flag.success
// console.log(f)
// console.log(Flag.error)
// enum Color {red,blue,orange}
// var c:Color = Color.orange
// console.log(c)
var Color;
(function (Color) {
    Color[Color["red"] = 0] = "red";
    Color[Color["blue"] = 5] = "blue";
    Color[Color["orange"] = 6] = "orange";
})(Color || (Color = {}));
var c = Color.orange;
console.log(c); //orange == 6
// 任意类型（any）
// var num:any = 123
// num = 'str'
// num = true
// console.log(num)
// 任意类型的作用
var oBox = document.getElementById('box');
oBox.style.color = 'red';
// null 和 undefined  其他（never类型）数据类型的子类型
// var num:number;
// console.log(num)//输出，undefined  报错
// var num:undefined;
// console.log(num)//输出，undefined  正确
// var num:number | undefined;
// num = 123;
// console.log(num)
// 定义没有赋值
// var num:number | undefined;
// console.log(num)
// var num:null;
// num = null;
// 一个元素可能是 number类型 可能是null  可能是undefined
var num;
num = 1234;
console.log(num);
// void类型：typescript中的void表示没有任何类型，一般用于定义方法的时候方法没有返回值。
// es5的定义方法
// function run(){
//     console.log('run')
// }
// run()
// 表示方法没有返回任何类型
/*
function run():void{
    console.log('run')
}
run()
*/
// 错误写法
/*
function run():undefined{
    console.log('run')
}
run()
*/
// 正确写法
// function run():number{
//     return 123
// }
// run();
// never类型：是其他类型（包含null和undefined）的子类型，代表从不会出现的值。
// 这意味着声明never的变量只能被never类型所赋值
/*
var a:undefined;
a=undefined

var b:null;
b = null;
*/
var a;
// a=123;//错误的写法
a = (function () {
    throw new Error('错误');
})();
